/*
 * AutoPtr.h
 *
 *  Created on: 2012/02/26
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_AUTOPTR_H
#define INCLUDED_NTENGINE_AUTOPTR_H

namespace NTEngine{

/// 簡易AutoPtr
/// 途中で消したい場合は0を代入してやる
/// また、管理の譲渡など呼吸な機能は用意しない。もっぱらローカル変数用だと思っていい。
template< class T > class AutoPtr {
public:
	AutoPtr( T* p = 0 );
	~AutoPtr();
	AutoPtr& operator=( T* p );
	T& operator*();
	const T& operator*() const;
	T* operator->();
	const T* operator->() const;
	operator void*() const; //これのおかげでif ( p ){ と書ける。
private:
	void operator=( AutoPtr< T >& ); //代入は禁止。管理の移譲はわかりにくい。
	AutoPtr( AutoPtr< T >& ); //コピーコンストラクタも禁止。管理の移譲はわかりにくい。

	T* mPointer;
};

} //namespace NTEngine
#include "NTEngine/Base/Impl/AutoPtrImpl.h"

#endif // INCLUDED_NTENGINE_AUTOPTR_H
